package controllers;

import java.io.File;
import java.util.List;

import models.Filme;
import models.RepositorioFilme;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Http.MultipartFormData;
import play.mvc.Http.MultipartFormData.FilePart;
import play.mvc.Result;
import play.mvc.Security;
import views.html.Filmes.atualizar;
import views.html.Filmes.editar;
import views.html.Filmes.inserir;
import views.html.Filmes.listar;
import views.html.Filmes.mostrar;
import views.html.Filmes.remover;
import dao.DAOComentario;
import dao.DAOFilme;

public class Filmes extends Controller {

	private static Form<Filme> formFilme = new Form<Filme>(Filme.class);
	private static RepositorioFilme repFilme = new RepositorioFilme(
			new DAOFilme());

	public static Result fotoFilme(Integer Idfilmania) {
		Filme filme = repFilme.procurar(Idfilmania);
		if (filme == null)
			return notFound("Filme não encontrado");
		response().setContentType("image/jpeg");
		return ok(filme.foto).as("image/jpeg");
	}

	@Security.Authenticated(Securedoff.class)
	public static Result Inserir() {
		return ok(inserir.render(formFilme));
	}

	@Security.Authenticated(Securedoff.class)
	public static Result inserido() {
		MultipartFormData body = request().body().asMultipartFormData();
		FilePart picture = body.getFile("Foto");
		File foto = null;
		if (picture != null) {
			foto = picture.getFile();
		}
		Form<Filme> novoFilme = formFilme.bindFromRequest();
		Filme filme = novoFilme.get();
		filme.foto = foto;
		repFilme.inserir(filme);
		return ok("Filme Cadastrado");
	}

	public static Result listar() {
		List<Filme> filmes = repFilme.todos();
		return ok(listar.render(filmes));
	}
	
	public static Result listarGenero(String genero) {
		DAOFilme daogenero = new DAOFilme();
		List<Filme> filmes = daogenero.Genero(genero);
		System.out.println(filmes);
		return ok(listar.render(filmes));
	}

	public static Result mostrar(Integer Idfilmania) {
		Filme filme = repFilme.procurar(Idfilmania);
		if (filme == null)
			return notFound("Filme não encontrado");
		return ok(mostrar.render(filme));
	}

	@Security.Authenticated(Securedoff.class)
	public static Result editar(Integer Idfilmania) {
		Filme filme = repFilme.procurar(Idfilmania);
		if (filme == null)
			return notFound("Filme não encontrado");
		return ok(editar.render(filme));
	}

	@Security.Authenticated(Securedoff.class)
	public static Result atualizar() {
		MultipartFormData body = request().body().asMultipartFormData();
		FilePart picture = body.getFile("foto");
		File foto = null;
		if (picture != null) {
			foto = picture.getFile();
		}
		Form<Filme> novoFilme = formFilme.bindFromRequest();
		System.out.print(novoFilme);
		Filme filme = novoFilme.get();
		filme.foto = foto;
		repFilme.atualizar(filme);
		return ok(atualizar.render(filme));
	}

	@Security.Authenticated(Securedoff.class)
	public static Result remover(Integer Idfilmania) {
		Filme filme = new Filme();
		filme.idFilmania = Idfilmania;
		repFilme.excluir(filme);
		return ok(remover.render(filme));
	}

}
